/**
 * 
 */
package com.obradovicnjegovan.webprodavnica.pages;

import java.util.Set;

import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;

import com.obradovicnjegovan.webprodavnica.controller.ControllerAL;
import com.obradovicnjegovan.webprodavnica.entities.Narudzbenica;
import com.obradovicnjegovan.webprodavnica.entities.OdabranProizvod;

/**
 * @author njegovan
 *
 */
public class Cart {
	@Inject
	private ControllerAL controllerAL;
	@Property
	private OdabranProizvod op;
	
	public Set<OdabranProizvod> getOdabraniProizvodi(){
		return controllerAL.getKorpa().getOdabraniProizvodi();
	}
	
	public double getUkupnaCena(){
		double ukupnaCena = 0;
		try {
			for (OdabranProizvod od : controllerAL.getKorpa().getOdabraniProizvodi()) {
				ukupnaCena = ukupnaCena + (od.getProizvod().getCena()*od.getKolicina());
			}
			return  ukupnaCena;
		} catch (Exception e) {
			// TODO: handle exception
		}
		return 0;
	}
	
	public String formatDouble(double cena){
		return controllerAL.formatDouble(cena);
	}
	
	public double getCenaOd(){
		return op.getProizvod().getCena()*op.getKolicina();
	}
	
	@InjectComponent
	private Zone zone;
	
	@CommitAfter
	public Object onIzbaciProizvodIzKorpe(OdabranProizvod odabranProizvod){
		controllerAL.getKorpa().getOdabraniProizvodi().remove(odabranProizvod);
		controllerAL.sacuvajKorpu(controllerAL.getKorpa());
		try {
			controllerAL.obrisiOdabranProizvod(odabranProizvod);
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		return zone.getBody();
	}
	
	public Object onDodaj(OdabranProizvod odabranProizvod){
		for (OdabranProizvod o : controllerAL.getKorpa().getOdabraniProizvodi()) {
			if (o.equals(odabranProizvod)) {
				o.setKolicina(o.getKolicina()+1);
				controllerAL.sacuvajKorpu(controllerAL.getKorpa());
				return zone.getBody();
			}
		}
		return null;
	}
	
	
	public Object onOduzmi(OdabranProizvod odabranProizvod){
		for (OdabranProizvod o : controllerAL.getKorpa().getOdabraniProizvodi()) {
			if (o.equals(odabranProizvod)) {
				int signum = Integer.signum(o.getKolicina() - 1);
				switch (signum) {
				case 1:
					o.setKolicina(o.getKolicina()-1);
					controllerAL.sacuvajKorpu(controllerAL.getKorpa());
					return zone.getBody();
				case 0:
					onIzbaciProizvodIzKorpe(odabranProizvod);
					return zone.getBody();
					
				default:
					return null;
				}

			} 
		}
		return null;
	}
	
	@CommitAfter
	public Object onNaruciProizvode(){
		try {
			if (controllerAL.getKorpa().getNarudzbenica()==null) {
				Narudzbenica n = controllerAL.kreirajNovuNarudzbenicu(controllerAL.getKorpa());
				controllerAL.getKorpa().setNarudzbenica(n);
			}
			if (controllerAL.getKorpa().getOdabraniProizvodi().isEmpty()) {
				return this;
			}
			return Order.class;
		} catch (Exception e) {
			
		}
		return null;
	}
}